﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Business.Dicionary;
using Business.Entity.Contabil.Pessoa;
using Business.Entity.Contabil.Pessoa.ClassesRelacionadas;
using Business.Entity.Contabil.Pessoa.ClassesRelacionadas.Endereco;
using Business.Entity.Contabil.Pessoa.SubClass.Empresa;

namespace Business.Forms
{
    public partial class FormEmpresa : FormDefault
    {
        private Pessoa Pessoa { get; set; }
        public FormEmpresa()
        {
            InitializeComponent();
            empresaBindingSource.DataSource = EmpresaRepository.GetList();
            enderecosBindingSource.DataSource = new PessoaEndereco();
            matrizBindingSource.DataSource = EmpresaRepository.GetList();
            sPEDInstituicaoResponsavelDictionaryBindingSource.DataSource =
                new SPEDInstituicaoResponsavelDictionary();
            regimeTributacaoDictionaryBindingSource.DataSource = new RegimeTributacaoDictionary();
        }

        private void empresaBindingSource_CurrentChanged(object sender, System.EventArgs e)
        {
            var curr = (Empresa)empresaBindingSource.Current;
            if (curr.Id != 0)
            {
                txtCnpj.Enabled = false;
                txtInscricaoEstadual.Enabled = false;
            }
            else
            {
                txtCnpj.Enabled = true;
                txtInscricaoEstadual.Enabled = true;
            }
        }

        private void cmdNovaEmpresa_Click(object sender, System.EventArgs e)
        {
            Pessoa = Pessoa = new Pessoa()
            {
                EnderecoEletronicos = new List<EnderecoEletronico>(),
                ContatoTelefonicos = new List<ContatoTelefonico>(),
                Enderecos = new List<PessoaEndereco>()
            };
            var emp = new Empresa()
            {
                Pessoa = Pessoa
            };
            empresaBindingSource.Add(emp);
            empresaBindingSource.MoveLast();
        }

        private void cmdSalvar_Click(object sender, System.EventArgs e)
        {
            empresaBindingSource.EndEdit();
            var s = EmpresaRepository.GetSession();
            var t = s.BeginTransaction();
            try
            {
                var emp = (Empresa)empresaBindingSource.Current;
                emp.Pessoa = Pessoa;
                emp.Pessoa.Enderecos.Clear();
                emp.Pessoa.Enderecos.Add((PessoaEndereco)enderecosBindingSource.Current);
                s.Save(Pessoa);
                s.Save(emp);
                t.Commit();
            }
            catch (Exception ex)
            {
                t.Rollback();
                MessageBox.Show(ex.Message);
            }
            
        }

        private void cmdCancelar_Click(object sender, System.EventArgs e)
        {
            empresaBindingSource.CancelEdit();
        }

        private void cepTextBox_Leave(object sender, EventArgs e)
        {
            var end = (PessoaEndereco)enderecosBindingSource.Current;
            var endereco = EnderecoRepository.GetByCep(txtCep.Text);
            if (endereco == null)
            {
                MessageBox.Show("CEP não encontrado.\n\nInforme um CEP válido.");
                txtCep.Focus();
                return;
            }
            end.Endereco = endereco;
            end.Logradouro = endereco.Nome;
        }

        
    }
}